package com.eian.boot.crypto.store;

import com.eian.boot.crypto.model.CryptoContext;

/**
 * 密钥存储接口
 * <p>
 * 提供密钥的存储、提取、删除等操作
 * <p>
 * 默认实现：InMemoryKeyStore（基于内存）
 * 扩展实现：可通过实现此接口并标注 @Primary 来覆盖默认实现
 *
 * @author eian
 */
public interface KeyStore {

    /**
     * 存储密钥信息
     *
     * @param keyId         密钥标识符（唯一）
     * @param cryptoContext 加密上下文（包含密钥、IV等）
     */
    void store(String keyId, CryptoContext cryptoContext);

    /**
     * 提取密钥信息
     *
     * @param keyId 密钥标识符
     * @return 加密上下文，不存在返回null
     */
    CryptoContext retrieve(String keyId);

    /**
     * 删除密钥信息
     *
     * @param keyId 密钥标识符
     * @return 是否删除成功
     */
    boolean remove(String keyId);

    /**
     * 判断密钥是否存在
     *
     * @param keyId 密钥标识符
     * @return 是否存在
     */
    boolean exists(String keyId);

    /**
     * 清空所有密钥
     */
    void clear();
}

